package com.monster.dao;

import com.monster.pojo.Album;
import com.monster.pojo.Playlist;
import com.monster.pojo.Singer;
import com.monster.pojo.Song;

import java.util.ArrayList;

/**
 * Song类的数据访问层接口，包含查询song表和相关联的其他表得到与song相关的数据的签名
 * @author cyb
 */
public interface SongDao {
    /**
     * 通过id查询song表获得歌曲的全部信息
     * @param id
     * @return Song
     */
    Song getSongById(Long id);

    /**
     * 通过id查询song表获得song的id、name和time
     * @param id
     * @return Song
     */
    Song getSimpleSongById(Long id);

    /**
     * 通过song_id联表查询歌手信息
     * @param songId
     * @return Singer集合
     */
    ArrayList<Singer> listSingersBySongId(Long songId);

    /**
     * 通过song_id联表查询专辑信息
     * @param songId
     * @return Album 专辑信息
     */
    Album getAlbumBySongId(Long songId);

    /**
     * 通过song_id联表查询3条歌单信息，并按播放量降序
     * @param songId
     * @return Playlist集合，歌单信息
     */
    ArrayList<Playlist> listPlaylistsBySongId(Long songId);

    /**
     * 根据关键字模糊查询歌曲信息，按热度降序
     * @param key
     * @return Song集合，歌曲信息
     */
    ArrayList<Song> listSongsByFuzzy(String key);


}
